/**************************************************************************************************************
* CONSTANTES
***************************************************************************************************************/
var NACIONALIDAD_POR_DEFECTO = "Chilena";             //usado para el determinar la nacionalidad por defecto
//declaraciones de codigos de retorno de los procedimientos almacenados
var CONST_CODIGO_SQL_VALOR_DUPLICADO = -100;
var CONST_CODIGO_SQL_ERROR = -200;
var CONST_CODIGO_SIN_CONEXION = -201;
var CONST_CODIGO_SIN_SESION = -500;
var CONST_CODIGO_SQL_EXITO = 200;
var CONST_CODIGO_SQL_SIN_DATOS = 404;
var CONST_CODIGO_TEXTO_NO_PERMITIDO = 550;
var NOMBRE_FORM_PRADO = "ctl0_form1";
var NOMBRE_FORM_PRADO_JQUERY = "#" + NOMBRE_FORM_PRADO;
var NOMBRE_FORM_NORMAL = "form1";
var NOMBRE_FORM_NORMAL_JQUERY = "#" + NOMBRE_FORM_NORMAL;

//llave perfiles
var KEY_PERFIL_USUARIO = "USU";
var KEY_PERFIL_COMPANIA_SEGURO = "COM";
var KEY_PERFIL_ADMINISTRADOR = "ADM";
var KEY_PERFIL_WORKFLOW = "WF";

/***************************************************************************************************************
* METODOS
***************************************************************************************************************/
//------------------------------------------------------------------------------------
//Descripcion: construye un objeto fecha a partir de una fecha dada
//Por        : VSR, 01/01/2011
function getDate(strDate, strTime){
  strDate   = strDate.replace(/[-]/g, "/");
  var day   = strDate.split("/")[0];
  var month = strDate.split("/")[1] - 1;
  var year  = strDate.split("/")[2];
  var hour  = strTime.split(":")[0];
  var seg   = strTime.split(":")[1];
  return new Date(year, month, day, hour, seg, 0, 0);
}

//------------------------------------------------------------------------------------
//Descripcion: resta dos fechas y devuelve la cantidad de dias de diferencias entre ellas
//Por        : VSR, 01/01/2011
function diffDayDate(objFechaInicio,objFechaTermino){
  //1 dia expresado en milisegundos
  var mseg_dia   = 1000*60*60*24;
  //resta ambas fechas y obtiene los dias de diferencia
  var diferenciaDias = Math.ceil((objFechaTermino.getTime()-objFechaInicio.getTime())/(mseg_dia));
  //retorna valor
  return diferenciaDias;
}

//------------------------------------------------------------------------------------
//Descripcion: suma n dias a una fecha dada
//Por        : VSR, 02/05/2012
function addDayDate(objFecha,dias){
  objFecha.setDate(objFecha.getDate()+dias);
  return objFecha;
}

//------------------------------------------------------------------------------------
//Descripcion: formatea una fecha como dd/mm/aaaa
//Por        : VSR, 02/05/2012
function formatearFechaDDMMAAAA(objFecha){
  var dia = objFecha.getDate();
  var mes = objFecha.getMonth()+1;
  var ano = objFecha.getFullYear();
  dia = Right("00" + dia,2);
  mes = Right("00" + mes,2);

  var nuevaFecha = dia+"/"+mes+"/"+ano;
  return nuevaFecha;

}

//------------------------------------------------------------------------------------
//Descripcion : mantiene un control visible
//Por         : VSR, 01/01/2011
function mostrarElemento(idElemento){
  var elemento = document.getElementById(idElemento);
  if(elemento){
    elemento.style.display = "block";
  }
}

//------------------------------------------------------------------------------------
//Descripcion : oculta un control
//Por         : VSR, 01/01/2011
function ocultarElemento(idElemento){
  var elemento = document.getElementById(idElemento);
  if(elemento){
    elemento.style.display = "none";
  }
}

//------------------------------------------------------------------------------------
//Descripcion : limpia el control con el valor enviado
//Por         : VSR, 01/01/2011
function limpiarInnerHTML(idElemento,valor){
  var elemento = document.getElementById(idElemento);
  if(elemento){
    elemento.innerHTML = valor;
  }
}

//------------------------------------------------------------------------------------
//Descripcion : limpia el control con el valor enviado
//Por         : VSR, 01/01/2011
function limpiarTextBox(idElemento,valor){
  var elemento = document.getElementById(idElemento);
  if(elemento){
    elemento.value = valor;
  }
}

//----------------------------------------------------------------------------------------------------------------
function Left(s, n){
  // Devuelve los n primeros caracteres de la cadena
  if(n>s.length)
    n=s.length;
    
  return s.substring(0, n);
}

//----------------------------------------------------------------------------------------------------------------
function Right(s, n){
  // Devuelve los n últimos caracteres de la cadena
  var t=s.length;
  if(n>t)
    n=t;
  return s.substring(t-n, t);
}

//----------------------------------------------------------------------------------------------------------------
function Mid(s, n, c){
  // Devuelve una cadena desde la posición n, con c caracteres
  // Si c = 0 devolver toda la cadena desde la posición n
  
  var numargs=Mid.arguments.length;
  
  // Si sólo se pasan los dos primeros argumentos
  if(numargs<3)
    c=s.length-n+1;
    
  if(c<1)
    c=s.length-n+1;
  if(n+c >s.length)
    c=s.length-n+1;
  if(n>s.length)
    return "";
    
  return s.substring(n-1,n+c-1);
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Quita espacios en blanco a la izquierda del texto
function LTrim(s){
  var s2    = "";
  var largo = s.length;

  for (var i = 0; (i<largo) && (s.substr(i,1)==" "); i++ )  ;
  for (         ;  i<largo                         ; i++ )  s2 = s2 + s.substr(i,1);
  return(s2);
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Quita espacios en blanco a la derecha del texto
function RTrim(s){
  var s2    = "";
  var largo = s.length;

  for (var i=largo-1; (i>=0) && (s.substr(i,1)==" "); i-- )  ;
  for (             ;  i>=0                         ; i-- )  s2 = s.substr(i,1) + s2;
  return(s2);
}

//----------------------------------------------------------------------------------------------------------------
function Trim(s){
  // Quita los espacios del principio y del final
  return LTrim(RTrim(s));
}

//----------------------------------------------------------------------------------------------------------------
function InStr(n, s1, s2){
  // Devuelve la posición de la primera ocurrencia de s2 en s1
  // Si se especifica n, se empezará a comprobar desde esa posición
  // Sino se especifica, los dos parámetros serán las cadenas
  var numargs=InStr.arguments.length;
  
  if(numargs<3)
    return n.indexOf(s1)+1;
  else
    return s1.indexOf(s2, n)+1;
}

//----------------------------------------------------------------------------------------------------------------
function RInStr(n, s1, s2){
  // Devuelve la posición de la última ocurrencia de s2 en s1
  // Si se especifica n, se empezará a comprobar desde esa posición
  // Sino se especifica, los dos parámetros serán las cadenas
  var numargs=RInStr.arguments.length;
  
  if(numargs<3)
    return n.lastIndexOf(s1)+1;
  else
    return s1.lastIndexOf(s2, n)+1;
}

//----------------------------------------------------------------------------------------------------------------
function Space(n){
  // Devuelve una cadena con n espacios
  var t="";
  
  for(var i=1; i<=n; i++)
    t=t+" ";
  
  return t;
}

//----------------------------------------------------------------------------------------------------------------
function jString(n, c){
  // Devuelve n veces el caracter c
  var t="";
  
  for(var i=1; i<=n; i++)
    t=t+c;
  return t;
}

//----------------------------------------------------------------------------------------------------------------
function UCase(s){
  // Devuelve la cadena convertida a mayúsculas
  return s.toUpperCase();
}

//----------------------------------------------------------------------------------------------------------------
function LCase(s){
  // Devuelve la cadena convertida en minúsculas
  return s.toLowerCase();
}

//----------------------------------------------------------------------------------------------------------------
function Len(s){
  // Devuelve la longitud de la cadena s
  return s.length;
}

//----------------------------------------------------------------------------------------------------------------
function StrReverse(s){
  // Invierte la cadena
  var i=s.length;
  var t="";
  
  while(i>-1){
    t=t+ s.substring(i,i+1);
    i--;
  }
  return t;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: determina que tipo de archivo es el archivo
//Por        : VSR, 01/01/2011
function obtenerExtensionArchivo(nombreArchivo){
  var extension = "";  
  //valida si es Vacio
  if(Trim(nombreArchivo)=="") return extension;

  //separa el nombre del archivo por cada punto(.) que encuentre y lo deja en un arreglo
  var arrSplit = nombreArchivo.split(".");
  //obtiene largo del arreglo
  var largo = arrSplit.length;
  //obtiene la extension del archivo
  extension = arrSplit[largo-1].toLowerCase();
  //retorna valor
  return extension;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: determina que tipo de archivo es segun la extension
//Por        : VSR, 01/01/2011
function obtenerTipoArchivo(extension){
  var tipoImage       = "|bmp|cod|gif|ief|jpe|jpeg|jpg|jfif|svg|tif|tiff|ras|cmx|ico|png|pnm|pbm|pgm|ppm|rgb|xbm|xpm|xwd|";
  var tipoOffice      = "|doc|dot|xla|xlc|xlm|xls|xlt|xlw|msg|sst|cat|stl|pdf|pot|pps|ppt|mpp|wcm|wdb|wks|wps|mdb|";
  var tipoApplication = "|evy|fif|spl|hta|acx|hqx|bin|class|dms|exe|lha|lzh|oda|axs|prf|p10|crl|ai|eps|ps|rtf|setpay|setreg|hlp|bcpio|cdf|z|tgz|cpio|csh|dcr|dir|dxr|dvi|gtar|gz|hdf|ins|isp|iii|js|latex|crd|clp|dll|m13|m14|mvb|wmf|mny|pub|scd|trm|wri|cdf|nc|pma|pmc|pml|pmr|pmw|p12|pfx|p7b|spc|p7r|p7c|p7m|p7s|sh|shar|swf|sit|sv4cpio|sv4crc|tar|tcl|tex|texi|texinfo|roff|t|tr|man|me|ms|ustar|src|cer|crt|der|pko|zip|";
  var tipoAudio       = "|au|snd|mid|rmi|mp3|aif|aifc|aiff|m3u|ra|ram|wav|";
  var tipoMessage     = "|mht|mhtml|nws|";
  var tipoText        = "|css|323|htm|html|stm|uls|bas|c|h|txt|rtx|sct|tsv|htt|htc|etx|vcf|";
  var tipoVideo       = "|mp2|mpa|mpe|mpeg|mpg|mpv2|mov|qt|lsf|lsx|asf|asr|asx|avi|movie|";
  var tipoOtros       = "|flr|vrml|wrl|wrz|xaf|xof|";
  var tipoArchivo     = "";

  //se formatea la extension para buscarlo
  extension           = "|"+ extension +"|";

  //verfica que tipo de archivo es   
  if(InStr(0, tipoImage, extension)>0){
    tipoArchivo = "image";
  }
  else if(InStr(0, tipoOffice, extension)>0){
    tipoArchivo = "office";
  }
  else if(InStr(0, tipoApplication, extension)>0){
    tipoArchivo = "application";
  }
  else if(InStr(0, tipoAudio, extension)>0){
    tipoArchivo = "audio";
  }
  else if(InStr(0, tipoMessage, extension)>0){
    tipoArchivo = "message";
  }
  else if(InStr(0, tipoText, extension)>0){
    tipoArchivo = "text";
  }
  else if(InStr(0, tipoVideo, extension)>0){
    tipoArchivo = "video";
  }
  else if(InStr(0, tipoOtros, extension)>0){
    tipoArchivo = "otro";
  }
  else{
    tipoArchivo = "desconocido";
  }
  
  //retorna valor
  return tipoArchivo;
}

//------------------------------------------------------------------
//Descripcion : permite que a traves de un link se muestre u oculte una capa dando la sensacion de que
//              se expande y contrae
//Por         : VSR, 01/01/2011
function expandirContraer(idContenedorImagenExpandirContraer,idCapaExpandirContraer,accion,funcionExecExpandir,funcionExecContraer, themeBaseUrl){
  var imagen = document.getElementById(idContenedorImagenExpandirContraer);
  var capa   = document.getElementById(idCapaExpandirContraer);
  var sEval = "";
  
  if (imagen && capa) {
    if (accion == "expandir") {
      imagen.innerHTML = "<a href=\"javascript:;\" onclick=\"expandirContraer('" + idContenedorImagenExpandirContraer + "','" + idCapaExpandirContraer + "','contraer','" + funcionExecExpandir + "','" + funcionExecContraer + "','"+ themeBaseUrl +"');\"><span class=\"ico16-contraer cursorPointer\"><img src=\""+ themeBaseUrl +"/img/_blank.gif\" class=\"ico16ExpandirContraer\" alt=\"\" /></span></a>&nbsp;";
      capa.style.display = "block";
      if (typeof (funcionExecExpandir) == "string" && funcionExecExpandir != "") {
        sEval = "if(typeof(@FUNCION@)=='function'){@FUNCION@();}";
        eval(sEval.replace(/\@FUNCION@/g, funcionExecExpandir));
      }
    }
    else {
      imagen.innerHTML = "<a href=\"javascript:;\" onclick=\"expandirContraer('" + idContenedorImagenExpandirContraer + "','" + idCapaExpandirContraer + "','expandir','" + funcionExecExpandir + "','" + funcionExecContraer + "','"+ themeBaseUrl +"');\"><span class=\"ico16-expandir cursorPointer\"><img src=\""+ themeBaseUrl +"/img/_blank.gif\" class=\"ico16ExpandirContraer\" alt=\"\" /></span></a>&nbsp;";
      capa.style.display = "none";
      if (typeof (funcionExecContraer) == "string" && funcionExecContraer != "") {
        sEval = "if(typeof(@FUNCION@)=='function'){@FUNCION@();}";
        eval(sEval.replace(/\@FUNCION@/g, funcionExecContraer));
      }
    }
  }
}

//------------------------------------------------------------------
//Descripcion : destaca la fila
//Por         : VSR, 01/01/2011
function destacarFilaTabla(eTabla,objActivaDestacar,backcolorNormal,backcolorDestacado, destacarSiempre){
  var backColorFila;
  var tabla         = document.getElementById(eTabla);
  var rowConsultada = objActivaDestacar.parentNode;
  
  //busca el indice de la fila hasta que lo encuentre. tiene un maximo de 5 niveles
  if(!rowConsultada.rowIndex){
    rowConsultada = objActivaDestacar.parentNode.parentNode;
    if(!rowConsultada.rowIndex){
      rowConsultada = objActivaDestacar.parentNode.parentNode.parentNode;
      if(!rowConsultada.rowIndex){
        rowConsultada = objActivaDestacar.parentNode.parentNode.parentNode.parentNode;
        if(!rowConsultada.rowIndex){
          rowConsultada = objActivaDestacar.parentNode.parentNode.parentNode.parentNode.parentNode;
        }
      }
    }
  }
  //asigna indice de la fila encontrada
  var indexFilaConsultada   = rowConsultada.rowIndex;
  //si el objeto esta marcado entonces destaca la fila, sino lo deja normal
  
  if(!destacarSiempre){
    if(objActivaDestacar){
      destacarSiempre = objActivaDestacar.checked;
    }
  }
  
  if(destacarSiempre){
    backColorFila = backcolorDestacado;
  }
  else{
    backColorFila = backcolorNormal;
  }
  //asigna color de fondo a la fila seleccionada
  tabla.rows[indexFilaConsultada].style.backgroundColor = backColorFila;
}

//------------------------------------------------------------------
//Descripcion : resetea los valores de un formulario
//Por         : VSR, 01/01/2011
function resetForm(el){
  var form = document.getElementById(el);
  if(form){
    form.reset();
  }
}

//------------------------------------------------------------------
//Descripcion : selecciona todas las opciones del combo
//Por         : VSR, 01/01/2011
function seleccionarTodo(listBox, checkBox){
  var list = document.getElementById(listBox);
  if (!list.disabled) {
    selectAll(list,checkBox);
  }
  return false;
}

//------------------------------------------------------------------
//Descripcion : deja todas las opciones marcadas
//Por         : VSR, 01/01/2011
function selectAll(objTargetElement,checkBox){
  var check = document.getElementById(checkBox);
  for (var i = 0; i < objTargetElement.length; i++) {
    objTargetElement.options[i].selected = check.checked;
  }
  return false;
}

//------------------------------------------------------------------
//Descripcion : cuenta cuantos objetos seleccionados hay
//Por         : VSR, 01/01/2011
function contarSeleccionadosMultiSelect(objTargetElement){
  var contador = 0;
  for (var i = 0; i < objTargetElement.length; i++) {
    if(objTargetElement.options[i].selected) contador++;
  }
  return contador;
}

//------------------------------------------------------------------
//Descripcion : desmarca opciones
//Por         : VSR, 01/01/2011
function desmarcarTodos(checkBox){
  var check = document.getElementById(checkBox);
  check.checked = false;
}

//------------------------------------------------------------------
//Descripcion : formatea el control si tiene un error
//Por         : VSR, 01/01/2011
function formatearEstiloConError(obj,el){
  var elemento = (el!="") ? document.getElementById(el): obj;
  if(elemento){
    jQuery(elemento).addClass("cssDestacadoMsgErrorInput");
  }
}

//------------------------------------------------------------------
//Descripcion : formatea el control
//Por         : VSR, 01/01/2011
function formatearEstiloNormal(obj,el, inicializarEnBlanco, esReadOnly, valorPorDefecto, classNamePorDefecto){
  var elemento = (el!="") ? document.getElementById(el): obj;
  var className = "cssInput";
  var valor     = "";
  
  //setea los parametros del objeto segun su tipo
  jQuery(elemento).removeClass("readOnly");
  jQuery(elemento).removeClass("cssDestacadoMsgErrorInput");

  if(elemento){
    //setea el valor
    if(inicializarEnBlanco){
      valor = "";
    }
    else{
      valor = (valorPorDefecto!="") ? valorPorDefecto:elemento.value;
    }
    
    //setea el estilo
    if(esReadOnly){
      className = "readOnly";
    }
    else{
      className = (classNamePorDefecto!="") ? classNamePorDefecto:className;
    }

    //--- formatea un control SELECT ----------
    if(elemento.type == "select-one" || elemento.type == "select-multiple"){
      //setea valor
      if(valor!=""){
        elemento.value = valor;
      }
      else{
        if(inicializarEnBlanco) elemento.selectedIndex = 0;
      }
      //setea className
      jQuery(elemento).addClass(className);
      //setea disabled
      elemento.disabled = esReadOnly;
    }

    //--- formatea un RADIOBUTTON o CHECKBOX ----------
    else if(elemento.type == "checkbox" || elemento.type == "radio"){
      //setea valor
      if(valor!=""){
        if(UCase(valor)=="TRUE" || valor=="1"){
          elemento.checked = true;
        }
        else{
          if(UCase(valor)=="FALSE" || valor=="0"){
            elemento.checked = false;
          }
          else{
            elemento.checked = (elemento.checked) ? true:false;
          }
        }
      }
      else{
        elemento.checked = (elemento.checked) ? true:false;
      }
      //setea className
      jQuery(elemento).addClass(className);
      //setea disabled
      elemento.disabled = esReadOnly;
    }

    //--- formatea un FILE ----------
    else if(elemento.type == "file"){
      //setea className
      jQuery(elemento).addClass(className);
      //setea disabled
      elemento.disabled = esReadOnly;
    }

    //--- formatea un TEXTBOX ----------
    else{
      //setea valor
      elemento.value = valor;
      //setea className
      jQuery(elemento).addClass(className);
      //setea disabled
      elemento.readOnly = esReadOnly;
      if(!esReadOnly) {elemento.disabled = esReadOnly;}
    }

  }
}

//--------------------------------------------------------------------------------------------
//Descripcion : obtiene el valor de un select a partir de un texto a buscar
//Por         : VSR, 01/01/2011
function obtenerValorSelect(nombreSelect,valorABuscar){
  var objSelect = document.getElementById(nombreSelect);
  var valorSelect = "";
  var valorOption = "";

  if(objSelect){
    var totalOpciones = objSelect.options.length - 1;
    //formate el valor para buscarlo correctamente
    valorABuscar = "," + valorABuscar + ",";
    for(var i=0; i<=totalOpciones; i++){
      valorOption = "," + objSelect.options[i].value + ",";
      if(InStr(0,valorOption,valorABuscar)>0){
        valorSelect = objSelect.options[i].value;
        break;
      }
    }
  }
  return valorSelect;
}

//-------------------------------------------------------------------------------------
//Descripcion : reemplaza valor vacio por una imagen en blanco
//Por         : VSR, 01/01/2011
function replaceValorVacio(valor){
  var themeBaseUrl = obtenerThemeBaseUrl();
  var valorReemplazo  = "<img src=\""+ themeBaseUrl +"/img/_blank.gif\" align=\"absmiddle\" style=\"width:1px;height:1px;\" alt=\"\" />";
  var newValor        = "";

  if(RTrim(LTrim(valor))==""){
    newValor = valorReemplazo;
  }
  else{
    newValor = valor;
  }
  return newValor;
}

//-------------------------------------------------------------------------------------
//Descripcion : construye el html para mostrar el error
//Por         : VSR, 01/01/2011
function obtenerHTMLError(msgError){
  var html = "";
  html += "<table border=\"0\" cellpadding=\"0\" border=\"0\">";
  html += " <tr style=\"vertical-align:top;\">";
  html += "   <td><img src=\"../img/ico_error.gif\" alt=\"error\"/></td>";
  html += "   <td style=\"padding-left:5px;\"><div><b>Se encontraron los siguientes errores en este bloque:</b></div><div>"+ msgError +"</div></td>";
  html += " </tr>";
  html += "</table>";
  //retorna valor
  return html;
}

//-------------------------------------------------------------------------------------
//Descripcion : ejecuta el metodo click del elemento(si lo permite)
//Por         : VSR, 01/01/2011
function ejecutarEventoClickConEnter(elemForm, el){
  var elemento = document.getElementById(el);
  var keycode = "";
  var KEY_RETURN = 13;

  if(elemento){
    //recupera el evento del teclado. Usa prototype
    jQuery("#"+elemForm).bind("keydown", function(event){
      if (event.which) {
        keycode = event.which;
      } else {
        keycode = event.keyCode;
      }
      
      if(keycode == KEY_RETURN){
        //elemento.click();
        jQuery("#"+el).click(function(event){
          alert("aa");
        });

      }
    });

  }
}

//--------------------------------------------------------------
//Descripcion : obtiene los valores de un multiselect separados por coma
//Por         : VSR, 01/01/2011
function obtenerValoresMultiSelect(obj){
  var lista = "";
  var valor = "";
  //construye la lista separados por coma
  for(var i=0; i<obj.length; i++){
    if (obj.options[i].selected){
      valor = obj.options[i].value;
      lista += (lista=="") ? valor : ","+ valor;
    }
  }
  //asigna valor
  return lista;
}

//-------------------------------------------------------------------------------------
//Descripcion : valida si hay valores duplicados
//Por         : VSR, 01/01/2011
function esValidoValoresDuplicados(nameListadoBusqueda, idABuscar){
  var objListadoBusqueda  = document.getElementsByName(nameListadoBusqueda);
  var objABuscar          = document.getElementById(idABuscar);
  var esValido            = false;

  //si el objeto existe entonces lo revisar
  if(objListadoBusqueda){
    var totalRegistros    = objListadoBusqueda.length;
    var valorSeleccionado = objABuscar.value;
    for(var i=0; i < totalRegistros; i++){
      //si el registro ya existe entonces retorna verdadero
      if(objListadoBusqueda[i].value == valorSeleccionado ){
        esValido = true;
        break;
      }	
    }
  }

  //retorna valor
  return esValido;
}

//-------------------------------------------------------------------------------------
//Descripcion : muestra mensaje con un boton cerrar
//Por         : VSR, 09/04/2011
function mostrarMensaje(options) {
  var html = "";
  var mensaje = "";
  var oContenedor = document.getElementById(options.nombreContenedor);
  var themeBaseUrl = obtenerThemeBaseUrl();

  try {
    if (options.tipo == "Error") {
      styleMarco = "cssDestacadoMsgError";
      color = "rojo";
      mensaje = "<span class='cssMensajeError'><span class=\"ico16-error\"><img src=\""+ themeBaseUrl +"/img/_blank.gif\" class=\"ico16\" alt=\"\" /></span>&nbsp;" + options.mensaje + "</span>";
    }
    else if (options.tipo == "Advertencia") {
      styleMarco = "cssDestacadoMsgAdvertencia";
      color = "amarillo";
      mensaje = "<span class='cssMensajeAdvertenciaBloque'><span class=\"ico16-warning\"><img src=\""+ themeBaseUrl +"/img/_blank.gif\" class=\"ico16\" alt=\"\" /></span>&nbsp;" + options.mensaje + "</span>";
    }
    else if (options.tipo == "Ayuda") {
      styleMarco = "cssDestacadoMsgAdvertencia";
      color = "amarillo";
      mensaje = "<span class='cssMensajeAdvertenciaBloque'><span class=\"ico16-ayuda\"><img src=\""+ themeBaseUrl +"/img/_blank.gif\" class=\"ico16\" alt=\"\" /></span>&nbsp;" + options.mensaje + "</span>";
    }
    else {
      styleMarco = "cssDestacadoMsgExito";
      color = "verde";
      mensaje = "<span class='cssMensajeExito'><span class=\"ico16-ticket\"><img src=\""+ themeBaseUrl +"/img/_blank.gif\" class=\"ico16\" alt=\"\" /></span>&nbsp;" + options.mensaje + "</span>";
    }

    html += "<center>";
    html += "<div style=\"padding-bottom:7px; width:" + options.width + ";\">";
    html += " <div class=\"" + styleMarco + "\">";
    html += "   <div class=\"clearBoth\">";
    html += "     <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"width:100%; height:" + options.height + ";\">";
    html += "       <tr valign=\"top\">";
    html += "         <td style=\"padding-right:10px;text-align:center;\">" + mensaje + "</td>";
    if(options.mostrarBotonCerrar) {html += "         <td style=\"width:13px\"><a href=\"javascript:;\" onclick=\"ocultarElemento('" + options.nombreContenedor + "')\"><span class=\"ico16-cerrar-"+ color +"\"><img src=\""+ themeBaseUrl +"/img/_blank.gif\" class=\"ico16Cerrar cursorPointer\" alt=\"\" /></span></a></td>";}
    html += "       </tr>";
    html += "     </table>";
    html += "   </div>";
    html += " </div>";
    html += "</div>";
    html += "</center>";

    oContenedor.style.display = "block";
    oContenedor.innerHTML = html;
    //limpia el mensaje
    if (options.cerrarAutomatico) {
      setTimeout("ocultarElemento('" + options.nombreContenedor + "')", 5000);
    }
  }
  catch (e) {
    if (e.description) { //para IE
      alert("Exception:\n" + e.description)
    }
    else { // otro navegador
      alert("Exception:\n" + e)
    }
    return false;
  }
}

//-------------------------------------------------------------------------------------
//Descripcion : muestra los mensajes de error en los controles respectivos, usando el
//              validar "validationEngine"
//Por         : VSR, 01/01/2011
function GEN_MostrarMensajesError(arrayErrores) {
  var totalErrores = arrayErrores.length;
  for (var i = 0; i <= totalErrores - 1; i++) {
    control = arrayErrores[i].control;
    mensaje = arrayErrores[i].mensaje;
    if (mensaje != "") {
      jQuery.validationEngine.addPromptError(control, mensaje);
    } else {
      jQuery.validationEngine.removePrompt(control);
    }
  }
}

//------------------------------------------------------------------------------------
//Descripcion : obtiene el path base del theme seleccionado en el sistema
//Por         : VSR, 24/02/2011
function obtenerThemeBaseUrl(){
  var txtThemeBaseUrl = document.getElementById("ctl0_txtThemeBaseUrl");
  var txtThemeBaseUrlPopUp = document.getElementById("txtThemeBaseUrl");
  if(txtThemeBaseUrl) {themeBaseUrl = txtThemeBaseUrl.value;}
  if(txtThemeBaseUrlPopUp) {themeBaseUrl = txtThemeBaseUrlPopUp.value;}
  return themeBaseUrl;
}

//------------------------------------------------------------------------------------
//Descripcion : destaca la pagina seleccionada en el menu
//Por         : VSR, 28/03/2011
function destacarPaginaMenu(idPagina, themeBaseUrl) {
  var vineta = "<span class=\"ico16-vineta\"><img src=\""+ themeBaseUrl +"/img/_blank.gif\" class=\"ico16Vineta\" alt=\"\" /></span>&nbsp;";
  jQuery(".cssMenuContenedorLinkPagina_"+ idPagina).attr("class","cssMenuContenedorLinkPaginaDestacado");
  jQuery("#menuVineta_"+ idPagina).html(vineta);
}

//------------------------------------------------------------------------------------
//Descripcion : abre la pagina seleccionada del menu
//Por         : VSR, 28/03/2011
function abrirPaginaMenu(idPagina, nombrePagina) {
  var queryString = "";
  queryString += "page=Pagina.HttpAjax";
  queryString += "&op=GrabarPaginaMenu";
  queryString += "&idPagina="+ idPagina;

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (contieneTextoTerminoSesion(respuesta)) {
      redireccionarLogin();
    }
    else if (respuesta == CONST_CODIGO_SQL_ERROR) {
      alert("Ha ocurrido un error interno y no se pudo grabar la página");
    }
    else {
      top.location.href = "index.php?page="+ nombrePagina;
    }
  }
  var errFunc = function(t) {
    alert("Ha ocurrido un error interno y no se pudo grabar la página");
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}

//------------------------------------------------------------------------------------
//Descripcion : reemplaza caracteres especiales en un texto
//Por         : VSR, 28/03/2011
function reemplazarCaracteresEspeciales(texto) {
  texto = texto.replace("\r\n","");
  return texto;
}

//------------------------------------------------------------------------------------
//Descripcion : graba el estado de la notificacion seleccionada por el usuario
//Por         : VSR, 11/04/2011
function grabarEstadoNotificacion(idUsuario,idNotificacion,controlHtml,estado) {
  var objControlHtml = document.getElementById(controlHtml);
  var queryString = "";
  queryString += "page=Pagina.HttpAjax";
  queryString += "&op=GrabarEstadoNotificacion";
  queryString += "&idUsuario="+ idUsuario;
  queryString += "&idNotificacion="+ idNotificacion;
  queryString += "&estado="+ estado;

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (contieneTextoTerminoSesion(respuesta)) {
      redireccionarLogin();
    }
    else if (respuesta == CONST_CODIGO_SQL_ERROR) {
      alert("Ha ocurrido un error interno y no se pudo grabar el estado de la notifación");
    }
    else {
      jQuery("#"+ controlHtml).tooltip_hide();
      objControlHtml.id = objControlHtml.id+"NoMostrar";
    }
  }
  var errFunc = function(t) {
    alert("Ha ocurrido un error interno y no se pudo grabar el estado de la notifación");
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}

//------------------------------------------------------------------------------------
//Descripcion : visita la pagina seleccionada
//Por         : VSR, 03/05/2011
function visitarUrl(link) {
  top.location.href = link;
}

//------------------------------------------------------------------------------------
//Descripcion : construye mensaje para el modal dialog
//Por         : VSR, 10/05/2011
function generarTextoHtmlModal(mensaje){
  var themeBaseUrl = obtenerThemeBaseUrl();
  var html = "<div class=\"simplemodal-texto\"><img src=\""+ themeBaseUrl+"/img/loading.gif\" alt=\"\" style=\"vertical-align:middle;\" />&nbsp;&nbsp;"+ mensaje +"</div>";
  return html;
}

//-------------------------------------------------------------------------------------
//Descripcion : cuenta cuantos caracteres a escrito y los va descontando del total
//Por         : VSR, 17/05/2011
function contadorCaracteresRestantes(elemTexto,elemContenedorContador,maximoCaracteresEscribir){
  var oTextBox = document.getElementById(elemTexto);
  var oContenedorContador = document.getElementById(elemContenedorContador);
  var largoTexto = 0;
  var msgAlerta = "";

  if(oTextBox && oContenedorContador){
    largoTexto = oTextBox.value.length;
    if(largoTexto>maximoCaracteresEscribir){
      msgAlerta = "<span class='cssMensajeError'>(Ha alcanzado el l&iacute;mite m&aacute;ximo de caracteres para escribir, que son "+ maximoCaracteresEscribir+" en total)</span>";
      oTextBox.value = Left(oTextBox.value, maximoCaracteresEscribir);
    } else {
      msgAlerta = "Total de caracteres restantes:&nbsp;<span style='font-size:13px'><b>"+ (maximoCaracteresEscribir-largoTexto) +"</b></span>";
    }
    oContenedorContador.innerHTML = msgAlerta;
  }
}

//-------------------------------------------------------------------------------------
//Descripcion : carga las opciones del combo desde un JSON
//Por         : VSR, 27/11/2011
function cargarOpcionesComboDesdeJSON(opciones){
  var data = jQuery.parseJSON(opciones.json);
  var nombreCombo = opciones.nombreCombo;
  var objCombo = document.getElementById(nombreCombo);
  var cabeceraCombo = opciones.cabeceraCombo;
  var nombreComboJQUERY = "#" + nombreCombo;
  var seleccionado = "";

  if(objCombo){
    //limpia el control y añade las opciones
    jQuery(nombreComboJQUERY).html("");
    if(cabeceraCombo == "Seleccione") {
      jQuery(nombreComboJQUERY).append(jQuery("<option></option>").attr("value", "-100").text("--Seleccione--"));
    } else if(cabeceraCombo == "Todos"){
      jQuery(nombreComboJQUERY).append(jQuery("<option></option>").attr("value", "-1").text("--Todos--"));
    }
  }

  if(data && objCombo) {
    jQuery.each(data, function() {
      seleccionado = (this.Seleccionado == "1") ? "selected" : "";
      jQuery(nombreComboJQUERY).append(jQuery("<option "+ seleccionado +"></option>").attr("value", this.Valor).text(this.Texto));
    });
  }
}

function cargarLink(link){
  location.href = link;
}

//------------------------------------------------------------------------------------
//Descripcion : obtiene el contenido de la empresa para mostrar en el login
//Por         : VSR, 07/02/2012
function cargarContenidoLogin(url) {
  var hContenidoLogin = document.getElementById("hContenidoLogin");
  var queryString = "";
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=ObtenerContenidoLogin";
  queryString += "&url="+ url;

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (contieneTextoTerminoSesion(respuesta)) {
      hContenidoLogin.innerHTML = "";
    }
    else if (respuesta == CONST_CODIGO_SQL_ERROR) {
      hContenidoLogin.innerHTML = "";
    }
    else {
      hContenidoLogin.innerHTML = respuesta;
    }
  }
  var errFunc = function(t) {
    hContenidoLogin.innerHTML = "";
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}

//------------------------------------------------------------------------------------
//Descripcion : redondea un numero
//Por         : VSR, 07/02/2012
function roundNumber(num, dec) {
  var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
  return result;
}